###########
#	Makefile - "La constructora"
#	@version: 2.0.0
#

# VARIABLES
CXX=g++
CXXFLAGS=		## flags del compilador: Wall para "warnings all"
TEMPFLAGS=		##  -Wall	
PFLAGS = -I /usr/include/python2.6  -lpython2.6 -lstdc++

STDERR =
LOG=no
LOGFILE= 

EFLOAT= 
ECOMPLEJOS = 
EMANDELBROT = 
EINTERFAZ=

#Directorios:
FLOAT= Float/
COMPLEJOS = Complejos/
MANDELBROT = Mandelbrot/
INTERFAZ = Py/

## targets:

## decidi que por defecto fuera debug
ifeq ($(DEBUG),no)
	CXXFLAGS = $(TEMPFLAGS)
else
	CXXFLAGS = $(TEMPFLAGS) -g
endif

ifeq ($(LOG),yes)
	STDERR=2>
	LOGFILE=error.log
	EFLOAT= $(STDERR) $(FLOAT)$(LOGFILE)
	ECOMPLEJOS = $(STDERR) $(COMPLEJOS)$(LOGFILE)
	EINTERFAZ = $(STDERR) $(INTERFAZ)$(LOGFILE)
	EMANDELBROT = $(STDERR) $(MANDELBROT)$(LOGFILE)
endif


## help

help:
	@echo '**************************************************************************************************'
	@echo 'MODO DE USO '
	@echo ' '
	@echo '		make nombreflag=yes '
	@echo 'donde nombreflag puede ser '
	@echo '		DEBUG que pone -g en las opciones del g++ (debugging symbols) '
	@echo '		LOG que pone la salida del stderr del g++ en un "error.log" dentro de la carpeta del prog. '
	@echo '(este último comando puede tirar algún "make*** error" pero igual hace el output al error.log'
	@echo ' '
	@echo ' '
	@echo 'Ahora se hace make "nombreModulo" y no make "nombreModulo-main" '
	@echo 'ej: '
	@echo '		make listaDeMat '
	@echo '		make listaDeMat DEBUG=NO LOG=yes '
	@echo ' '
	@echo ' '
	@echo 'versión 2.0 '
	@echo '**************************************************************************************************** '
	
float: $(FLOAT)testfloat.cpp $(FLOAT)float.cpp $(FLOAT)stringutils.cpp $(FLOAT)vectorutils.cpp $(FLOAT)testvectorutils.cpp $(FLOAT)teststringutils.cpp
	$(CXX) $(CXXFLAGS) -o $(FLOAT)Float $(FLOAT)testfloat.cpp $(FLOAT)float.cpp $(EFLOAT)

complejo: $(COMPLEJOS)Complejo.cpp $(COMPLEJOS)Complejo.h
	$(CXX) $(CXXFLAGS) -o $(COMPLEJOS)Complejo $(COMPLEJOS)Complejo.cpp  $(ECOMPLEJO)

mandelbrot: $(MANDELBROT)Mandelbrot.h $(MANDELBROT)Mandelbrot.cpp
	$(CXX) $(CXXFLAGS) -o $(MANDELBROT)mandelbrot $(MANDELBROT)Mandelbrot.cpp $(EMANDELBROT) $(PFLAGS)

mandelbrot-64: $(MANDELBROT)Mandelbrot.h $(MANDELBROT)Mandelbrot.cpp
	$(CXX) $(CXXFLAGS) -o $(MANDELBROT)mandelbrot-64 $(MANDELBROT)Mandelbrot.cpp $(EMANDELBROT) $(PFLAGS)

mandelbrot-nico: $(MANDELBROT)Mandelbrot.h $(MANDELBROT)Mandelbrot.cpp
	$(CXX) $(CXXFLAGS) -o $(MANDELBROT)mandelbrot-nico $(MANDELBROT)Mandelbrot.cpp $(EMANDELBROT) $(PFLAGS)

mandelbrot-juan: $(MANDELBROT)Mandelbrot.h $(MANDELBROT)Mandelbrot.cpp
	$(CXX) $(CXXFLAGS) -o $(MANDELBROT)mandelbrot-juan $(MANDELBROT)Mandelbrot.cpp $(EMANDELBROT) $(PFLAGS)
	
mandelbrot-insane: $(MANDELBROT)Mandelbrot.h $(MANDELBROT)Mandelbrot.cpp
	$(CXX) $(CXXFLAGS) -o $(MANDELBROT)mandelbrot $(MANDELBROT)Mandelbrot.cpp $(EMANDELBROT) $(PFLAGS) -O3

interfaz: $(INTERFAZ)genVideo.py $(INTERFAZ)Interfaz.cpp $(Video.h)
	$(CXX) $(CXXFLAGS) $(PFLAGS) -o $(INTERFAZ)main $(INTERFAZ)Interfaz.cpp $(EINTERFAZ)


all : float complejo mandelbrot

run :
	$(FLOAT)float
	$(COMPLEJO)complejo
	$(MANDELBROT)mandelbrot


#endif
